package cn.tedu.csmall.product.controller;

import cn.tedu.csmall.product.pojo.dto.AlbumAddNewDTO;
import cn.tedu.csmall.product.pojo.dto.AlbumUpdateDTO;
import cn.tedu.csmall.product.pojo.vo.AlbumListItemVO;
import cn.tedu.csmall.product.service.IAlbumService;
import cn.tedu.csmall.product.web.JsonResult;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 相册模块的控制层
 * @author XingHaiYang
 * @date 2022/11/1 10:22
 */
@Slf4j
@Api(tags = "2.相册管理模块")
@RestController
@RequestMapping("/albums")
public class AlbumController {
    /**
     * 依赖注入进相册模块的业务层对象
     */
    @Autowired
    public IAlbumService service;

    /**
     * 新增相册功能
     * @param albumAddNewDTO 接收到的新增相册的参数
     * @return 新增成功，返回OK，失败，返回catch中处理的结果
     */
    @PostMapping("/addNew")
    @ApiOperation("增加相册")
    @ApiOperationSupport(order = 100)
    public JsonResult addNew(@RequestBody AlbumAddNewDTO albumAddNewDTO) {
        log.debug("新增相册控制层开始，接收到的参数为={}", albumAddNewDTO);
        service.addNew(albumAddNewDTO);
        return JsonResult.ok();
    }

    /**
     * 删除相册
     * @param id
     * @return
     */
    @PostMapping("/{id:[0-9]+}/delete")
    @ApiOperation("删除相册")
    @ApiOperationSupport(order = 200)
    public JsonResult deleteById(@PathVariable Long id) {
        log.debug("接收到的删除的id值为：" + id);
        service.deleteById(id);
        return JsonResult.ok();
    }

    /**
     * 编辑相册
     * @param id 相册id
     * @param albumUpdateDTO 获取的参数对象
     * @return 返回JsonResult
     */
    @PostMapping("/{id:[0-9]+}/update")
    @ApiOperation("修改相册")
    @ApiOperationSupport(order = 300)
    public JsonResult updateById(@PathVariable Long id, @RequestBody AlbumUpdateDTO albumUpdateDTO) {
        log.debug("接收到的编辑的id值为：" + id);
        log.debug("接收到的编辑的请求参数为：" + albumUpdateDTO);
        service.updateById(id,albumUpdateDTO);
        return JsonResult.ok();
    }

    /**
     * 查询相册列表
     * @return
     */
    @GetMapping("")
    @ApiOperation("查询相册列表")
    @ApiOperationSupport(order = 400)
    public JsonResult list() {
        log.debug("开始处理【查询相册列表】的请求");
        List<AlbumListItemVO> data = service.list();
        log.debug("查询出的相册数据为：{}"+data);
        return JsonResult.ok(data);
    }
}
